প্যারামিটার পাসিং হলো ফাংশনে ইনপুট হিসেবে মান বা রেফারেন্স প্রদান করার প্রক্রিয়া। ফাংশনে মান পাস করার জন্য সাধারণত দুটি পদ্ধতি রয়েছে: পাস-বাই-ভ্যালু এবং পাস-বাই-রেফারেন্স। এ দুটি পদ্ধতির মধ্যে পার্থক্য হলো, পাস-বাই-ভ্যালুতে মূল মান পরিবর্তিত হয় না, আর পাস-বাই-রেফারেন্সে মূল মান পরিবর্তিত হতে পারে।
1. পাস-বাই-ভ্যালু (Pass-by-Value)
পাস-বাই-ভ্যালু পদ্ধতিতে ফাংশনে প্যারামিটার পাস করার সময় মূল ভেরিয়েবলের মানের একটি কপি তৈরি করা হয় এবং ফাংশন সেই কপির উপর কাজ করে। ফলে, ফাংশনের ভেতরে মান পরিবর্তিত হলেও মূল ভেরিয়েবলের মান অপরিবর্তিত থাকে।
উদাহরণ (C):
#include <stdio.h>
void modify(int num) {
num = 20; // কপির মান পরিবর্তন
}
int main() {
int number = 10;
modify(number); // পাস-বাই-ভ্যালু
printf("Number: %d\n", number); // আউটপুট: 10
return 0;
}
উপরে, modify ফাংশনে number এর একটি কপি পাঠানো হয়েছে, তাই modify ফাংশনে মান পরিবর্তিত হলেও মূল number অপরিবর্তিত থাকে এবং আউটপুট হয় 10।
বৈশিষ্ট্য:
- ফাংশনে পাসকৃত মানের একটি কপি তৈরি হয়।
- মূল ভেরিয়েবলের মান পরিবর্তিত হয় না।
- C, C++ এর মতো ভাষায়
int,floatইত্যাদি প্রিমিটিভ টাইপের ক্ষেত্রে ব্যবহৃত হয়।
2. পাস-বাই-রেফারেন্স (Pass-by-Reference)
পাস-বাই-রেফারেন্স পদ্ধতিতে ফাংশনে প্যারামিটার পাস করার সময় মূল ভেরিয়েবলের রেফারেন্স পাঠানো হয়, অর্থাৎ ফাংশন মূল ভেরিয়েবলের ঠিকানা নিয়ে কাজ করে। এর ফলে, ফাংশনের ভেতরে মান পরিবর্তিত হলে মূল ভেরিয়েবলের মানও পরিবর্তিত হয়।
উদাহরণ (C++):
#include <iostream>
using namespace std;
void modify(int &num) { // রেফারেন্স পাস
num = 20; // মূল মান পরিবর্তন
}
int main() {
int number = 10;
modify(number); // পাস-বাই-রেফারেন্স
cout << "Number: " << number << endl; // আউটপুট: 20
return 0;
}
উপরে, modify ফাংশনে number এর রেফারেন্স পাঠানো হয়েছে, তাই ফাংশন number এর উপর কাজ করে এবং মূল মান পরিবর্তিত হয়। আউটপুট হবে 20।
বৈশিষ্ট্য:
- ফাংশনে মূল ভেরিয়েবলের ঠিকানা বা রেফারেন্স পাঠানো হয়।
- মূল ভেরিয়েবলের মান পরিবর্তিত হতে পারে।
- সাধারণত C++ এর মতো ভাষায় ব্যবহৃত হয় এবং Python এ সব অবজেক্ট পাস-বাই-রেফারেন্স হিসেবে কাজ করে।
Python এ পাস-বাই-ভ্যালু এবং পাস-বাই-রেফারেন্স
Python এ প্রিমিটিভ টাইপের ডেটা যেমন int, float ইত্যাদি পাস করলে প্রায় পাস-বাই-ভ্যালু হিসেবে কাজ করে, কারণ Immutable অবজেক্ট হলে এর কপি তৈরি হয়। কিন্তু Mutable অবজেক্ট যেমন list, dictionary পাস করলে মূল ডেটা পরিবর্তন করা সম্ভব হয়।
উদাহরণ (Python):
# পাস-বাই-রেফারেন্স উদাহরণ (Mutable Object)
def modify_list(my_list):
my_list.append(4) # মূল লিস্ট পরিবর্তিত হয়
numbers = [1, 2, 3]
modify_list(numbers)
print(numbers) # আউটপুট: [1, 2, 3, 4]
বৈশিষ্ট্য:
- Python এ Immutable অবজেক্ট হলে এটি প্রায় পাস-বাই-ভ্যালু হিসেবে কাজ করে।
- Mutable অবজেক্ট হলে পাস-বাই-রেফারেন্স হিসেবে কাজ করে এবং মূল মান পরিবর্তিত হয়।
পাস-বাই-ভ্যালু এবং পাস-বাই-রেফারেন্সের মধ্যে পার্থক্য
| বৈশিষ্ট্য | পাস-বাই-ভ্যালু | পাস-বাই-রেফারেন্স |
|---|---|---|
| কপি তৈরি | মানের একটি কপি তৈরি করা হয় | মূল ভেরিয়েবলের রেফারেন্স পাঠানো হয় |
| মূল মান পরিবর্তন | মূল মান পরিবর্তিত হয় না | মূল মান পরিবর্তিত হতে পারে |
| ব্যবহারিক উদাহরণ | C, প্রিমিটিভ টাইপ | C++, Python (Mutable Objects) |
উপসংহার
পাস-বাই-ভ্যালু মূল ভেরিয়েবলের একটি কপি পাঠিয়ে কাজ করে এবং মূল ভেরিয়েবলের মান অপরিবর্তিত থাকে। পাস-বাই-রেফারেন্স মূল ভেরিয়েবলের রেফারেন্স পাঠিয়ে কাজ করে এবং মান পরিবর্তিত হতে পারে। Python, C, C++ এর মতো ভাষায় পাস-বাই-ভ্যালু ও পাস-বাই-রেফারেন্স পদ্ধতির পার্থক্য দেখা যায়, যা ফাংশন ব্যবহার এবং ডেটা ম্যানেজমেন্টে গুরুত্বপূর্ণ ভূমিকা পালন করে।